qx.Class.define("mutual.formPersonaPlan", {
			extend : qx.ui.groupbox.GroupBox,
			events : {
				"cancelar" : "qx.event.type.Event"
			},
			construct : function(idPersona, idPersonaPlan) {
				
				this.base(arguments);
				this.setLayout(new qx.ui.layout.VBox(5));
				
				/* obtenemos los datos necesarios para realizar la edicion */
				var personaPlan = (idPersonaPlan)? this.getPersonaPlan(idPersonaPlan) : null;
				
				/* definimos el filtro de planes */
				var grpFields = new qx.ui.groupbox.GroupBox();
				var frmPersonaPlan = this;
				var filterPlanes = new mutual.filterPlanes(10, function(){
					var idPlan = filterPlanes.getSelectedEntity().value;
					if (!idPlan){
						return;
					}
					var plan = filterPlanes.getPlan(idPlan);
					frmPersonaPlan.getFields(plan.tipo_seguro, grpFields, personaPlan)
				});
				
				/* agregamos los campos segun el seguro recuperado */
				if (personaPlan){ 
					// si estamos editando, seteamos el filtro y disparamos el evento selected
					filterPlanes.setPlan(parseInt(personaPlan.id_plan));
					filterPlanes.fnSelected();
				}else{
					// si es un nuevo registro, cargamos todos los campos
					this.getFields(null, grpFields, personaPlan); 	
				}
				
				// agregamos el filtro y los campos
				this.add(filterPlanes);
				this.add(grpFields);
				
				/* cargamos los botones de actualizacion */
				var content = new qx.ui.container.Composite(new qx.ui.layout.HBox(4).set({alignX : "center"}))
				var btnAceptar = new qx.ui.form.Button("Guardar");
				btnAceptar.addListener("execute", function(){
					var idPlan = filterPlanes.getSelectedEntity().value;
					this.persistPersonaPlan(idPersonaPlan, idPersona, idPlan);
				}, this);
				var btnCancelar = new qx.ui.form.Button("Cancelar");
				btnCancelar.addListener("execute", function() {
							this.fireEvent("cancelar");
							this.destroy();
						}, this);
				content.add(btnAceptar);
				content.add(btnCancelar);
				this.add(content);
			},

			members : {
				lblNroSeguro : null,
				lblFechaContratacion : null,
				lblConyuge : null,
				
				ctrlNroSeguro : null,
				ctrlFechaContratacion : null,
				ctrlConyuge : null,
				
				setNroFicha : function(nroFicha){
					this.ctrlNroSeguro.setValue(nroFicha);
				},
				setFechaContratacion : function(fechaContratacion){
					if (!fechaContratacion || fechaContratacion == '0000-00-00') 
						return;
					var objDate = mutual.utilities.getDateObject(fechaContratacion);
					this.ctrlFechaContratacion.setValue(objDate);
				},
				setConyuge : function(idConyuge){
					if (idConyuge == 0) return;
					idConyuge = parseInt(idConyuge);
					this.ctrlConyuge.setPersona(idConyuge);
				},
				
				getNroFicha : function(){
					return (this.ctrlNroSeguro.getValue()) ? this.ctrlNroSeguro.getValue() : 0;
				},
				getFechaContratacion : function(){
					return this.ctrlFechaContratacion.getValue();
				},
				getConyuge : function(){
					var idConyuge = this.ctrlConyuge.getSelectedEntity().value;
					return (idConyuge)? idConyuge : 0;
				},
				
				getFields : function(tipoSeguro, grpFields, personaPlan){
					grpFields.removeAll();
					grpFields.setLayout(new qx.ui.layout.VBox(5));
					
					this.lblNroSeguro = new qx.ui.basic.Label("Solicitud Nro: "); this.ctrlNroSeguro = new qx.ui.form.TextField();
					this.lblFechaContratacion = new qx.ui.basic.Label("Vigencia: "); this.ctrlFechaContratacion = new qx.ui.form.DateField();
					this.lblConyuge = new qx.ui.basic.Label("Conyuge: "); this.ctrlConyuge = new mutual.filterPersonas(10);
					tipoSeguro = parseInt(tipoSeguro);
					
					switch (tipoSeguro){
						case 1:
						case 3:
						case 4:
						case 5:
							grpFields.add(this.lblNroSeguro); grpFields.add(this.ctrlNroSeguro);
							grpFields.add(this.lblFechaContratacion); grpFields.add(this.ctrlFechaContratacion);
							if (personaPlan){
								this.setNroFicha(personaPlan.nro_ficha);
								this.setFechaContratacion(personaPlan.fecha_contratacion);
							}
							break;
						case 2:
						default:
							grpFields.add(this.lblNroSeguro); grpFields.add(this.ctrlNroSeguro);
							grpFields.add(this.lblFechaContratacion); grpFields.add(this.ctrlFechaContratacion);
							grpFields.add(this.lblConyuge); grpFields.add(this.ctrlConyuge);
							if (personaPlan){
								this.setNroFicha(personaPlan.nro_ficha);
								this.setFechaContratacion(personaPlan.fecha_contratacion);
								this.setConyuge(personaPlan.id_conyuge);
							}
							break;
					}
					
					return grpFields;
				},
				getPersonaPlan : function(idPersonaPlan){
					var rpc = new qx.io.remote.Rpc("services/", "mutual.Asignacion");
					var personaPlan = rpc.callSync("getPersonaPlan", idPersonaPlan);
					return personaPlan;
				}, 
				
				persistPersonaPlan : function(idPersonaPlan, idPersona, idPlan){
					try{
						var nuevo = !(idPersonaPlan);
						var personaPlan = {
							id_persona_plan : idPersonaPlan,
							id_persona : idPersona,
							id_plan : idPlan,
							
							nro_ficha : this.getNroFicha(),
							fecha_contratacion : this.getFechaContratacion(), 
							id_conyuge : this.getConyuge()
						};
						if (!this.validate(personaPlan)){
							return;
						}
						var method = (nuevo) ? "insertPersonaPlan" : "editPersonaPlan";
						var rpc = new qx.io.remote.Rpc("services/","mutual.Asignacion");
						var response = rpc.callSync(method, personaPlan);
	
						this.persistSuccess();
						this.destroy();
					} catch(x){
						alert(x);
					}
				},
			
				validate : function(personaPlan){
					if (!personaPlan.id_plan || personaPlan.id_plan == 0){
						alert("Falta definir el Plan");
						return false;
					}else if(!personaPlan.nro_ficha || personaPlan.nro_ficha == 0){
						alert("Falta ingresar el nro de ficha");
						this.ctrlNroSeguro.focus();
						return false;
					}else if(!mutual.utilities.isNumeric(personaPlan.nro_ficha) || parseInt(personaPlan.nro_ficha) <= 0){
						alert("El nro de ficha no tiene el formato correcto");
						this.ctrlNroSeguro.focus();
						return false;
					}else if(!personaPlan.id_persona || personaPlan.id_persona == 0){
						alert("Falta definir una persona");
						return false;
					}else{
						return true;
					}
				}
			}
		});
